﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;

namespace NoteEnumerable
{
	class Rucksack: IEnumerable
	{
		/// <summary>
		/// Список дневников в рюкзаке
		/// </summary>
		public List<DayBook> DiaryList;
		/// <summary>
		/// Конструктор дневника
		/// </summary>
		public Rucksack()
		{
			// Создадим список записей
			DiaryList = new List<DayBook>();
		}

		/// <summary>
		/// Метод Добавить запись в дневник
		/// </summary>
		/// <param name="txt"></param>
		public void AddDiary(DayBook Diary)
		{
			DiaryList.Add(Diary);
		}

		/// <summary>
		/// Реализация итератора
		/// </summary>
		/// <returns>Вернёт случайный дневник из коллекции</returns>
		
		IEnumerator IEnumerable.GetEnumerator()
		{
			Random rnd = new Random();
			for (int i = 0; i < DiaryList.Count; i++)
			{
				//return new SampleEnumerator(this);
				int idx = rnd.Next(0, DiaryList.Count);
				yield return DiaryList[idx];
			}

			//yield return DiaryList.AsEnumerable().OrderBy(n => Guid.NewGuid()).Take(DiaryList.Count);
			//Random rnd = new Random();

		}
		
		/*
		public IEnumerator GetEnumerator()
		{
			return new BackPackEnumerator(this);
		}

		private class BackPackEnumerator : IEnumerator
		{
			private Random rnd;
			private int _position = -1;
			private Rucksack _col;

			public BackPackEnumerator(Rucksack collection)
			{
				rnd = new Random();
				_col = collection;
			}

			public bool MoveNext()
			{
				if (_position < _col.DiaryList.Count)
				{
					_position++;
					return true;
				}
				else
				{
					return false;
				}
			}

			public void Reset()
			{
				_position = -1;
			}

			public object Current
			{
				get 
				{					
					int idx = rnd.Next(0, _col.DiaryList.Count);
					return _col.DiaryList[idx];
				}
			}
		}
		*/
	}
}
